from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import render,redirect,HttpResponse


# 中间件原理：在用户通过url访问时，请求会先经过中间件最后到达视图函数，所以注册一个中间件用于验证登录的session信息，有则不干涉，没有就给定向到登录页面
class AuthMiddleWare(MiddlewareMixin):
    """用中间件判断登录状态"""
    # 进行登录验证,没有获取到session信息就重定向到登录页面
    def process_request(self,request): #process
        # 1.排除开登录页面不进行session验证
        if request.path_info in ['/login/','/img/code/']: # request.path_info能获取到请求的路径
           return
        session_info = request.session.get("info") # 2.获取存放的session信息，有就给访问，没有就返回登录页面
        if not session_info:
            return redirect('/login/')
        return
        # process_request返回空则不拦截继续往下走，返回各类信息的话就从此处返回了，不会继续往下走

    def process_response(self,request,response):
        return response # 此处的response是process_request或者视图函数的返回，也可以拦截即修改成自己想要的返回信息